// src/api/employeeApi.js
import axios from 'axios';

// 创建 axios 实例，配置基础 URL 和超时时间
const api = axios.create({
    baseURL: 'http://localhost:8082', // 你的 Spring Boot 后端地址
    timeout: 5000, // 请求超时时间（毫秒）
});

/**
 * 员工登录 API
 * @param {string} account - 账号
 * @param {string} password - 密码
 * @returns {Promise<Result<Employee>>} - 返回带员工信息的 Result 对象
 */
export const login = async (account, password) => {
    try {
        const response = await api.get(`/employee/login/${account}/${password}`);
        return response.data; // 返回后端响应的 Result 对象
    } catch (error) {
        // 统一处理错误（如网络问题、401 登录失败等）
        if (error.response) {
            // 后端返回的错误（如 401、404）
            return error.response.data;
        } else {
            // 网络或未知错误
            return {
                code: 500,
                message: '网络错误，请稍后重试',
                data: null,
            };
        }
    }
};

/**
 * 添加员工信息
 * @param {String} employeeName - 员工姓名
 * @param {Integer} gender - 员工性别（0 表示男，1 表示女）
 * @param {String} employeePhone - 员工电话
 * @param {String} email - 员工邮箱
 * @param {Integer} departmentId - 部门ID
 * @param {Integer} role - 角色ID
 * @param {String} position - 职位
 * @param {Date} hireDate - 入职日期（ISO 8601 格式）
 * @param {Date} birthDate - 出生日期（ISO 8601 格式）
 * @param {Integer} currentSalaryLevel - 当前薪资等级
 * @param {String} comments - 备注信息
 * @returns {Promise<Result>} - 返回添加结果的 Result 对象
 */
export const addEmployee = async (    employeeName,gender,employeePhone,email,departmentId ,role,
                                      position,hireDate,birthDate,currentSalaryLevel,comments) => {
    try {
        const response = await api.post(`/employee/insertEmpInfo/${employeeName}/${gender}/${employeePhone}/${email}/${departmentId}/${role}/${position}/${hireDate}/${birthDate}/${currentSalaryLevel}/${comments}`
            );
        return response.data;
    } catch (error) {
        if (error.response) {
            return error.response.data;
        } else {
            return {
                code: 500,
                message: '添加员工信息失败',
                data: null,
            };
        }
    }
};

/**
 * 查询全部个人信息
 * @returns {Promise<Result<Employee>>} - 返回员工数据的 Result 对象
 */
export const getAllEmployeeInfo = async () => {
    try {
        const response = await api.get(`/employee/queryAllEmpInfo`);
        return response.data;
    } catch (error) {
        if (error.response) {
            return error.response.data;
        } else {
            return {
                code: 500,
                message: '获取员工信息失败',
                data: null,
            };
        }
    }
};
/**
 * 根据员工ID查询个人信息
 * @param {number} employeeId - 员工ID
 * @returns {Promise<Result<Employee>>} - 返回员工数据的 Result 对象
 */
export const getEmployeeInfo = async (employeeId) => {
    try {
        const response = await api.get(`/employee/queryEmpInfoById/${employeeId}`);
        return response.data;
    } catch (error) {
        if (error.response) {
            return error.response.data;
        } else {
            return {
                code: 500,
                message: '获取员工信息失败',
                data: null,
            };
        }
    }
};

/**
 * 根据员工姓名查询个人信息
 * @param {string} employeeName - 员工姓名
 * @returns {Promise<Result<Employee>>} - 返回员工数据的 Result 对象
 */
export const getEmployeeInfoByName = async (employeeName) => {
    try {
        const response = await api.get(`/employee/queryEmpInfoByEmployeeName/${employeeName}`);
        return response.data;
    } catch (error) {
        if (error.response) {
            return error.response.data;
        } else {
            return {
                code: 500,
                message: '获取员工信息失败',
                data: null,
            };
        }
    }
};

/**
 * 根据员工姓名查询个人信息
 * @param {Integer} role - 员工姓名
 * @returns {Promise<Result<Employee>>} - 返回员工数据的 Result 对象
 */
export const getEmployeeInfoByRole = async (role) => {
    try {
        const response = await api.get(`/employee/queryEmpInfoByRole/${role}`);
        return response.data;
    } catch (error) {
        if (error.response) {
            return error.response.data;
        } else {
            return {
                code: 500,
                message: '获取员工信息失败',
                data: null,
            };
        }
    }
};

/**
 * 根据员工姓名查询个人信息
 * @param {Integer} role -
 * @param {Integer} departmentid - 部门id
 * @returns {Promise<Result<Employee>>} - 返回员工数据的 Result 对象
 */
export const getEmployeeInfoByRoleanddepartment = async (departmentid,role) => {
    try {
        const response = await api.get(`/employee/queryEmpByDeptAndRole/${departmentid}/${role}`);
        return response.data;
    } catch (error) {
        if (error.response) {
            return error.response.data;
        } else {
            return {
                code: 500,
                message: '获取员工信息失败',
                data: null,
            };
        }
    }
};

/**
 * 根据员工号查询个人信息
 * @param {string} employeeNo - 员工号
 * @returns {Promise<Result<Employee>>} - 返回员工数据的 Result 对象
 */
export const getEmployeeInfoByEmployeeNo = async (employeeNo) => {
    try {
        const response = await api.get(`/employee/queryEmpInfoByEmployeeNo/${employeeNo}`);
        return response.data;
    } catch (error) {
        if (error.response) {
            return error.response.data;
        } else {
            return {
                code: 500,
                message: '获取员工信息失败',
                data: null,
            };
        }
    }
}

/**
 * 修改员工个人信息
 * @param {Employee} employee - 员工实体对象
 * @returns {Promise<Result<boolean>>} - 返回修改结果的 Result 对象
 */
export const updateEmployeeInfo = async (employee) => {
    try {
        const response = await api.put(`/employee/updateEmpInfo`, employee);
        return response.data;
    } catch (error) {
        if (error.response) {
            return error.response.data;
        } else {
            return {
                code: 500,
                message: '修改员工信息失败',
                data: null,
            };
        }
    }
};

/**
 * 根据员工ID删除员工
 * @param {number} employeeId - 员工ID
 * @returns {Promise<Result<boolean>>} - 返回删除结果的 Result 对象
 */
export const deleteEmployee = async (employeeId) => {
    try {
        const response = await api.delete(`/employee/deleteEmpById/${employeeId}`, {
            method: 'DELETE',
        });
        return response.data;
    } catch (error) {
        if (error.response) {
            return error.response.data;
        } else {
            return {
                code: 500,
                message: '删除员工失败',
                data: null,
            };
        }
    }
};
